/**
 * @name createElement
 * @param {string} type  元素的类型
 * @param {object} props 元素的属性
 * @param {array} children 元素的子元素
 * 
 * */ 

export default function createElement(type, props, ...children){
    // 在对children操作之前我们先需要对数组进行拷贝 利用数组concat方法进行拷贝
    const childrenElements = [].concat(children).reduce((result, child) => {
        // 筛选出不需要显示的逻辑节点
        if (child !== false && child !== true && child != null) {
            if(child instanceof Object){
                result.push(child)
            }else {
                // 我们需要用createElement 去处理文本节点 并且返回处理后的结果
                result.push(createElement('text',{textContent: child}))
            }
        }
        return result
    }, [])
    // 返回虚拟dom
    return {
        type,
        props: Object.assign({children: childrenElements}, props),
        children: childrenElements,
    }
}